package exercises.leetcode;

import exercises.newcoder.util.ListNode;

/**
 * <a href="https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof">
 * 剑指 Offer 24. 反转链表</a>
 *
 * <p><span color="#87CEEB">描述:</span>
 * 定义一个函数，输入一个链表的头节点，反转该链表并输出反转后链表的头节点。
 * <p>
 *  
 * <p>
 * 示例:
 * <p>
 * 输入: 1->2->3->4->5->NULL
 * 输出: 5->4->3->2->1->NULL
 *  
 * <p>
 * 限制：
 * <p>
 * 0 <= 节点个数 <= 5000
 * <p>
 *  
 * <p>
 * 注意：本题与主站 206 题相同：https://leetcode-cn.com/problems/reverse-linked-list/
 *
 * @author or2
 * @date 2021年09月21日 时间: 18:13
 */
public class Offer24 {
    public ListNode reverseList(ListNode head) {
        if (head == null) {
            return null;
        }
        ListNode headAux = new ListNode(0);
        headAux.next = head;

        while (head.next != null) {
            ListNode next = head.next.next;
            head.next.next = headAux.next;
            headAux.next = head.next;
            head.next = next;
        }

        return headAux.next;
    }
}
